package server.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import server.business.pojo.PatientTransfusionInformation;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author Galaxy
 * @description 针对表【patient_transfusion_information(患者输血信息表)】的数据库操作Service
 * @createDate 2022-11-08 12:46:24
 */
public interface PatientTransfusionInformationService extends IService<PatientTransfusionInformation> {
    /**
     * 根据病人ID查找需要支付总金额
     *
     * @param patientId
     * @return 具体病人信息列表
     */
    List<Map<String, Object>> listPayPrice(String patientId);

    /**
     * 根据病人ID查找病人输血支付明细
     *
     * @param patientId,payState
     * @return 具体病人信息列表
     */
    List<PatientTransfusionInformation> listPayAlonePrice(String payState, String patientId);

    /**
     * 根据血液Id查询输血记录
     *
     * @param bloodId
     * @return 具体输血记录
     */
    List<PatientTransfusionInformation> getBloodRecoredById(String bloodId);

    /**
     * 根据病人ID查找病人输血明细
     *
     * @param patientId,startTime,endTime
     * @return 输血信息统计
     */
    List<PatientTransfusionInformation> getPersonBloodInfo(String patientId, Timestamp startTime, Timestamp endTime);

    /**
     * 根据科室名称查看各科室用血情况
     *
     * @param department,startTime,endTime
     * @return 输血信息统计
     */
    List<PatientTransfusionInformation> getDepartBloodInfo(String department, Timestamp startTime, Timestamp endTime);

    HashMap<String, Object> getGO(String bloodId);


    //*************************************zy*************************start

    /**
     * 根据患者id和输血单号查询所有输血信息
     *
     * @param patientId         患者Id
     * @param transfusionNumber 输血单号
     * @return 返回当前患者的输血信息列表
     */
    PatientTransfusionInformation findAllTransfusionByPatientIdAndTransfusionNumber(String patientId, String transfusionNumber);

    /**
     * 根据患者退血申请单号在患者输血信息表中查询血液Id
     *
     * @param transfusionNumber 患者输血申请单号
     * @return 返回血液Id
     */
    String findBloodIdByTransfusionNumber(String transfusionNumber);

    /**
     * 根据输血单号修改血液状态
     *
     * @param transfusionNumber 输血单号
     * @param state             血液状态
     */
    void setStateByTransfusionNumber(String transfusionNumber, String state);

    /**
     * 分页查询功能
     *
     * @param currentPage                        当前页面
     * @param pageSize                           页面显示个数
     * @param patientTransfusionInformationLists 患者输血信息
     * @return 返回分页查询结果
     */
    IPage<PatientTransfusionInformation> getPage(int currentPage, int pageSize, List<PatientTransfusionInformation> patientTransfusionInformationLists);

    /**
     * 根据编号批量下载选中数据
     *
     * @param response 请求
     * @param ids      编号列表
     * @throws IOException 异常
     */
    void batchDownload(HttpServletResponse response, ArrayList<Long> ids) throws IOException;

    //*************************************zy*************************end
}
